package netty.rpc.client;

import netty.rpc.client.RpcInterfaceProxy;
import org.springframework.beans.factory.FactoryBean;

/**
 * spring 找不到类型的bean的时候 会找到特殊工厂 看有没有类型bean，有的话 调用getObject方法创建
 * 这里用来作为创建RpcInterface动态代理的入口
 * @author Jim
 * @version 1.0.0
 * @descripition:
 * @date 2022/5/16 1:18
 */
public class RpcServiceFactory<T> implements FactoryBean<T> {

    private final Class<T> rpcInterfaceClass;

    public RpcServiceFactory(Class<T> rpcInterfaceClass) {
        this.rpcInterfaceClass = rpcInterfaceClass;
    }

    @Override
    public T getObject() throws Exception {
        return (T) RpcInterfaceProxy.createProxy(rpcInterfaceClass);
    }

    @Override
    public Class<?> getObjectType() {
        return rpcInterfaceClass;
    }
}
